home *** CD-ROM | disk | FTP | other *** search
- /*
- * Example of client using TCP protocol.
- */
-
- #include "inet.h"
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- int tfd;
- char *t_alloc(); /* TLI function */
- struct t_call *callptr;
- struct sockaddr_in serv_addr;
-
- pname = argv[0];
-
- /*
- * Create a TCP transport endpoint and bind it.
- */
-
- if ( (tfd = t_open(DEV_TCP, O_RDWR, 0)) < 0)
- err_sys("client: can't t_open %s", DEV_TCP);
-
- if (t_bind(tfd, (struct t_bind *) 0, (struct t_bind *) 0) < 0)
- err_sys("client: t_bind error");
-
- /*
- * Fill in the structure "serv_addr" with the address of the
- * server that we want to connect with.
- */
-
- bzero((char *) &serv_addr, sizeof(serv_addr));
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_addr.s_addr = inet_addr(SERV_HOST_ADDR);
- serv_addr.sin_port = htons(SERV_TCP_PORT);
-
- /*
- * Allocate a t_call structure, and initialize it.
- * Let t_alloc() initialize the addr structure of the t_call structure.
- */
-
- if ( (callptr = (struct t_call *) t_alloc(tfd, T_CALL, T_ADDR)) == NULL)
- err_sys("client: t_alloc error");
- callptr->addr.maxlen = sizeof(serv_addr);
- callptr->addr.len = sizeof(serv_addr);
- callptr->addr.buf = (char *) &serv_addr;
- callptr->opt.len = 0; /* no options */
- callptr->udata.len = 0; /* no user data with connect */
-
- /*
- * Connect to the server.
- */
-
- if (t_connect(tfd, callptr, (struct t_call *) 0) < 0)
- err_sys("client: can't t_connect to server");
-
- doit(stdin, tfd); /* do it all */
-
- close(tfd);
- exit(0);
- }
-
- /*
- * Read the contents of the FILE *fp, write each line to the
- * transport endpoint (to the server process), then read a line back from
- * the transport endpoint and print it on the standard output.
- */
-
- doit(fp, tfd)
- register FILE *fp;
- register int tfd;
- {
- int n, flags;
- char sendline[MAXLINE], recvline[MAXLINE + 1];
-
- while (fgets(sendline, MAXLINE, fp) != NULL) {
- n = strlen(sendline);
- if (t_snd(tfd, sendline, n, 0) != n)
- err_sys("client: t_snd error");
-
- /*
- * Now read a line from the transport endpoint and write it to
- * our standard output.
- */
-
- n = t_rcv(tfd, recvline, MAXLINE, &flags);
- if (n < 0)
- err_dump("client: t_rcv error");
- recvline[n] = 0; /* null terminate */
- fputs(recvline, stdout);
- }
-
- if (ferror(fp))
- err_sys("client: error reading file");
- }
-